// pages/register/register.js
import {
  staff_register
} from '../../utils/login_register'
import {
  startTokenRefresh
} from '../../utils/util'
import { getRegionTree, getSubRegion } from '../../utils/get_region'
import SHA256 from 'js-sha256'
Page({

  /**
   * 页面的初始数据
   */
  data: {
    account: '',
    password: '',
    name_input: '',
    confirmPassword: '',
    phone: '', // 手机号码
    idCard: '', // 身份证号
    gender: '男', // 性别，默认为男
    region: ['', '', '', ''], // 省市区街道四级
    tempRegion: ['', '', '', ''], // 临时存储选择中的区域数据

    // 区域选择器相关
    showAreaSelector: false,
    areaList: [], // 当前区域列表
    areaPath: [], // 区域选择路径
    areaUid:[],
    areaCode: [], // 存储四级区域code
    currentLevel: 0, // 当前选择级别: 0-省, 1-市, 2-区县, 3-街道
    areaPickerText: '', // 区域选择器显示文本
    mapKey: 'LXLBZ-HP66Q-PYL5K-B74JY-IFTMK-RYFV2', // 腾讯地图Key

    // 错误提示
    showError: true,
    errorMsg: ''

  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    // 确保区域数组初始化为四个空字符串
    this.setData({
      region: ['', '', '', ''],
      tempRegion: ['', '', '', '']
    });
    // 加载省级区域数据
    this.loadProvinces();

    console.log('初始化区域数组:', this.data.region);
  },

  /**
   * 输入账号
   */
  inputAccount(e) {
    this.setData({
      account: e.detail.value,
      showError: false
    })
  },

  /**
   * 输入手机号码
   */
  inputPhone(e) {
    this.setData({
      phone: e.detail.value,
      showError: false
    })
  },

  /**
   * 输入身份证号
   */
  inputIdCard(e) {
    this.setData({
      idCard: e.detail.value,
      showError: false
    })
  },

  /**
   * 输入姓名
   */
  inputName(e) {
    this.setData({
      name_input: e.detail.value,
      showError: false
    })
  },

  /**
   * 选择性别
   */
  selectGender(e) {
    this.setData({
      gender: e.currentTarget.dataset.gender,
      showError: false
    })
  },

  /**
   * 输入密码
   */
  inputPassword(e) {
    this.setData({
      password: e.detail.value,
      showError: false
    })
  },

  /**
   * 输入确认密码
   */
  inputConfirmPassword(e) {
    this.setData({
      confirmPassword: e.detail.value,
      showError: false
    })
  },

  /**
   * 切换同意条款
   */
  toggleAgree() {
    this.setData({
      agreeTerms: !this.data.agreeTerms,
      showError: false
    })
  },

  /**
   * 显示区域选择器
   */
  showAreaSelector() {
    // 初始化临时区域为当前选中的区域
    this.setData({
      showAreaSelector: true,
      tempRegion: [...this.data.region] // 创建新数组，避免引用问题
    });

    // 如果区域列表为空，则加载省级数据
    if (this.data.areaList.length === 0) {
      this.loadProvinces();
    }
  },

  /**
   * 隐藏区域选择器
   */
  hideAreaSelector() {
    this.setData({
      showAreaSelector: false
    });
  },

  /**
   * 加载省级数据
   */
  loadProvinces() {
    wx.showLoading({
      title: '加载中...',
    });

    // wx.request({
    //   url: 'https://apis.map.qq.com/ws/district/v1/list',
    //   data: {
    //     key: this.data.mapKey
    //   },
    //   success: (res) => {
    //     wx.hideLoading();
    //     if (res.data.status === 0) {
    //       const provinces = res.data.result[0];
    //       this.setData({
    //         areaList: provinces,
    //         currentLevel: 0,
    //         areaPath: []
    //       });
    //     } else {
    //       wx.showToast({
    //         title: '获取省份失败',
    //         icon: 'none'
    //       });
    //     }
    //   },
    //   fail: () => {
    //     wx.hideLoading();
    //     wx.showToast({
    //       title: '网络错误',
    //       icon: 'none'
    //     });
    //   }
    // });

    const rootFatherId = 5099263649039605; // 中国的fatherId
    getSubRegion(rootFatherId).then(res => {
      wx.hideLoading();
      if (res.code === 200) {
        const provinces = res.data;
        this.setData({
          areaList: provinces,
          currentLevel: 0,
          areaPath: []
        });
      } else {
        wx.showToast({
          title: '获取省份失败',
          icon: 'none'
        });
      }
    }).catch(err => {
      wx.hideLoading();
      wx.showToast({
        title: '网络错误',
      })
    })
  },

  /**
   * 加载下级区域
   */
  loadChildrenAreas(parentId, level) {
    wx.showLoading({
      title: '加载中...',
    });
    getSubRegion(parentId).then(res => { 
      wx.hideLoading();
      if (res.code === 200) { 
        if (res.data && res.data.length > 0) {
          // 有下级区域
          const children = res.data;
          this.setData({
            areaList: children,
            currentLevel: level
          });
        } else { 
          // 没有下级区域
          this.setData({
            areaList: [],
            currentLevel: level
          });

          console.log('当前区域没有下级区域，level:', level);

          // 如果是区县级别(level为2)，并且没有下级街道，允许直接确认
          if (level >= 2) {
            // 提示用户可以直接确认
            wx.showToast({
              title: '该区域下无更多区域，可直接确认',
              icon: 'none',
              duration: 2000
            });
          }
         }
      }
    }).catch(err => {
      wx.hideLoading();
      wx.showToast({
        title: '网络错误',
      })
    })
    // wx.request({
    //   url: 'https://apis.map.qq.com/ws/district/v1/getchildren',
    //   data: {
    //     key: this.data.mapKey,
    //     id: parentId
    //   },
    //   success: (res) => {
    //     wx.hideLoading();
    //     if (res.data.status === 0) {
    //       if (res.data.result[0] && res.data.result[0].length > 0) {
    //         // 有下级区域
    //         const children = res.data.result[0];
    //         this.setData({
    //           areaList: children,
    //           currentLevel: level
    //         });
    //       } else {
    //         // 没有下级区域
    //         this.setData({
    //           areaList: [],
    //           currentLevel: level
    //         });

    //         console.log('当前区域没有下级区域，level:', level);

    //         // 如果是区县级别(level为2)，并且没有下级街道，允许直接确认
    //         if (level >= 2) {
    //           // 提示用户可以直接确认
    //           wx.showToast({
    //             title: '该区域下无更多街道，可直接确认',
    //             icon: 'none',
    //             duration: 2000
    //           });
    //         }
    //       }
    //     } else {
    //       this.setData({
    //         areaList: [],
    //         currentLevel: level
    //       });
    //       wx.showToast({
    //         title: res.data.message || '获取区域失败',
    //         icon: 'none'
    //       });
    //     }
    //   },
    //   fail: () => {
    //     wx.hideLoading();
    //     wx.showToast({
    //       title: '网络错误',
    //       icon: 'none'
    //     });
    //   }
    // });
  },

  /**
   * 选择区域
   */
  selectArea(e) {
    const {uid,regionname,regioncode} = e.currentTarget.dataset;
    // console.log(e.currentTarget.dataset);
    const {currentLevel,areaPath,areaCode,areaUid} = this.data;

    // 创建新的数据副本
    let newAreaPath = [...areaPath];
    let newRegion = [...this.data.tempRegion]; // 使用临时区域数据
    let newareaCode = [...areaCode];
    let newAreaUid=[...areaUid];

    // 如果在中间级别选择，需要清除后续级别的数据
    if (currentLevel < newAreaPath.length) {
      newAreaPath = newAreaPath.slice(0, currentLevel);
      newareaCode = newareaCode.slice(0, currentLevel);
      newAreaUid = newAreaUid.slice(0, currentLevel);
    }

    // 添加当前选择的区域到对应级别
    newAreaPath.push(regionname);
    newRegion[currentLevel] = regionname;
    newareaCode[currentLevel] = regioncode;
    newAreaUid[currentLevel]=uid;

    // 清空当前级别之后的所有级别
    for (let i = currentLevel + 1; i < 4; i++) {
      newRegion[i] = '';
    }

    // console.log('选择的区域级别:', currentLevel, '值:', regionname);
    // console.log('当前区域数组:', newRegion);

    this.setData({
      areaPath: newAreaPath,
      tempRegion: newRegion,
      areaCode: newareaCode,
      areaUid:newAreaUid
    });

    // 检查是否为直辖市 (北京、天津、上海、重庆)
    const directCities = ['北京市', '天津市', '上海市', '重庆市'];
    const isDirectCity = (currentLevel === 0 && directCities.includes(regionname));

    if (currentLevel < 3 && !isDirectCity) {
      // 普通省市区，加载下一级
      this.loadChildrenAreas(uid, currentLevel + 1);
    } 
    else if (isDirectCity) {
      // 直辖市特殊处理 - 自动在省市级别填充相同值
      newRegion[1] = regionname; // 市级也填充直辖市名称
      // this.setData({
      //   tempRegion: newRegion
      // });
      // 直接加载区县级别
      this.loadChildrenAreas(uid, 1);
    } else if (currentLevel === 2 && this.data.areaList.length === 0) {
      // 如果区县下没有街道，直接确认选择
      this.confirmAreaSelection();
    } else if (currentLevel === 3) {
      // 街道级别或直辖市的区县级别已选择完成
      this.confirmAreaSelection();
    }
  },

  /**
   * 确认区域选择
   */
  confirmAreaSelection() {
    const {
      tempRegion,
      areaCode
    } = this.data;

    // 检查是否至少选择了四级（省市区街道）
    const hasMinLevels = tempRegion[0] && tempRegion[1] && tempRegion[2] && tempRegion[3];

    if (!hasMinLevels) {
      wx.showToast({
        title: '请至少选择省市区街道四级',
        icon: 'none',
        duration: 2000
      });
      return;
    }

    // 过滤空值并设置显示文本 - 只用于显示
    const validRegions = tempRegion.filter(item => item);
    const areaPickerText = validRegions.join(' ');

    // 确保区域数据正确保存
    this.setData({
      region: [...tempRegion], // 创建一个新数组，避免引用问题
      areaPickerText: areaPickerText,
      showAreaSelector: false
    });

    console.log('确认选择前的临时区域:', tempRegion);
    console.log('确认选择前的区域id:', this.data.areaCode);

    // 使用setTimeout确保数据已更新后再打印
    setTimeout(() => {
      console.log('确认选择后的区域:', this.data.region);
    }, 100);

    // 显示选择成功提示
    wx.showToast({
      title: '区域选择成功',
      icon: 'success',
      duration: 1500
    });
  },

  /**
   * 返回根级区域（省级）
   */
  goToRootArea() {
    this.loadProvinces();
  },

  /**
   * 跳转到特定级别
   */
  goToSpecificLevel(e) {
    const level = e.currentTarget.dataset.level;
    const {areaCode,areaPath,areaUid} = this.data;

    if (level < areaCode.length) {
      // 设置新的区域路径
      const newAreaPath = areaPath.slice(0, level + 1);
      this.setData({
        areaPath: newAreaPath
      });

      if (level === 0) { // 点击省级，加载市级
        this.loadChildrenAreas(areaUid[level], 1);
      } else if (level === 1) { // 点击市级，加载区县
        this.loadChildrenAreas(areaUid[level], 2);
      } else if (level === 2) { // 点击区县，加载街道
        this.loadChildrenAreas(areaUid[level], 3);
      }
    }
  },

  /**
   * 注册
   */
  register() {
    const {
      account,
      password,
      confirmPassword,
      phone,
      idCard,
      gender,
      region,
      areaCode,
      agreeTerms,
      name_input
    } = this.data

    // 校验输入
    if (!account) {
      this.setData({
        showError: true,
        errorMsg: '请输入账号'
      })
      return
    }
    if (!(/^[a-zA-Z0-9_]+$/.test(account))) {
      this.setData({
        showError: true,
        errorMsg: '账号只能包含数字、字母、下划线'
      })
      return
    }

    if (!phone) {
      this.setData({
        showError: true,
        errorMsg: '请输入手机号码'
      })
      return
    }

    if (phone.length !== 11) {
      this.setData({
        showError: true,
        errorMsg: '请输入正确的手机号码'
      })
      return
    }

    if (!idCard) {
      this.setData({
        showError: true,
        errorMsg: '请输入身份证号'
      })
      return
    }

    // 简单的身份证号验证（18位或15位）
    if (idCard.length !== 18 && idCard.length !== 15) {
      this.setData({
        showError: true,
        errorMsg: '请输入正确的身份证号'
      })
      return
    }

    if (!region[0] || !region[1] || !region[2] || !region[3]) {
      this.setData({
        showError: true,
        errorMsg: '请选择详细所在区域'
      })
      return
    }

    if (!password) {
      this.setData({
        showError: true,
        errorMsg: '请输入密码'
      })
      return
    }

    if (password.length < 6) {
      this.setData({
        showError: true,
        errorMsg: '密码至少6位'
      })
      return
    }

    if (password !== confirmPassword) {
      this.setData({
        showError: true,
        errorMsg: '两次密码不一致'
      })
      return
    }

    if (!agreeTerms) {
      this.setData({
        showError: true,
        errorMsg: '请阅读并同意用户协议和隐私政策'
      })
      return
    }

    // 显示加载中
    wx.showLoading({
      title: '注册中...',
      mask: true
    })

    //处理直辖市
    if (region[0] === '北京市' || region[0] === '天津市' || region[0] === '上海市' || region[0] === '重庆市') {
      region[1] = '8888';
      areaCode[1] = 8888;
    }
    //密码加密
    let password_sha256 = SHA256(password)
    const data = {
      'UserName': account,
      'Password': password_sha256,
      'Name': name_input,
      'Phone': phone,
      'IdentificationNumber': idCard,
      'Gender': gender,
      'ProvinceId': areaCode[0],
      'ProvinceName': region[0],
      'MunicipalityId': areaCode[1],
      'MunicipalityName': region[1],
      'DistrictId': areaCode[2],
      'DistrictName': region[2],
      'TownshipStreetsId': areaCode[3],
      'TownshipStreetsName': region[3],
      'Role': 'Staff'
    }
    console.log(data)

    // 调用注册接口
    staff_register(data).then(res => {
      // console.log(res)
      if (res.code === 200) {
        wx.hideLoading();
        wx.showToast({
          title: '注册成功',
          icon: 'success',
          duration: 2000
        })
        //跳转到登录页面
        wx.navigateBack()
      } else {
        // console.log(res)
        wx.hideLoading();
        wx.showToast({
          title: res.message || '账号重复',
          icon: 'none',
          duration: 2000
        })
      }
    }).catch(err => {
      wx.hideLoading();
      // console.log(err)
      wx.showToast({
        title: '注册失败，请重试',
        icon: 'none',
        duration: 2000
      })
    })
  },

  /**
   * 跳转到登录页面
   */
  goToLogin() {
    wx.navigateBack()
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})